// Query_base *pb1 = new AndQuery(Query("value1"), Query("value2"));
// Query_base *pb2 = new OrQuery(Query("value1"), Query("value2"));
// if (AndQuery *pa1 = dynamic_cast<AndQuery*>(pb1)) {
//     cout << "成功" << endl;
// }
// else {
//     cout << "失败" << endl;
// }
// if (AndQuery *pa2 = dynamic_cast<AndQuery*>(pb2)) {
//     cout << "成功" << endl;
// }
// else {
//     cout << "失败" << endl;
// }
// //19.7
// try {
//     AndQuery &ra1 = dynamic_cast<AndQuery&>(*pb1);
//     cout << "成功" << endl;
// }
// catch (bad_cast e) {
//     cout << e.what() << endl;
// }
// try {
//     AndQuery &ra2 = dynamic_cast<AndQuery&>(*pb2);
//     cout << "成功" << endl;
// }
// catch (bad_cast e) {
//     cout << e.what() << endl;
// }
// //19.8
// if (typeid(*pb1) == typeid(*pb2))
//     cout << "pd1与pd2指向的对象类型相同" << endl;
// else
//     cout << "pd1与pd2的动态类型不相同" << endl;
// if (typeid(*pb1) == typeid(AndQuery))
//     cout << "pd1的动态类型是AndQuery" << endl;
// else
//     cout << "pd1的动态类型并非是AndQuery" << endl;
// if (typeid(*pb2) == typeid(AndQuery))
//     cout << "pd2的动态类型是AndQuery" << endl;
// else
//     cout << "pd2的动态类型并非是AndQuery" << endl;